<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 增 Create 往对象中增加一个键值对 
        // 删 Delete 从对象中删除一个键值对 
        // 改 Update 修改对象的某一个成员
        // 查 Read Select 访问对象某一个成员的值 


        // 语法1 点语法 
        // 增  对象名.键名 = 值;   // 键名之前不存在 
        //   给一个不存在的键 赋值  就是增
        // 删  delete 对象名.键名
        // 改  对象名.键名 = 新值 // 键名之前存在 
        // 查  对象.键名 
        //  如果存在这个键 那么输出这个键对应的值  
        //  如果不存在这个键  那么结果是 undefined 



        // 准备一个空对象  

        // var obj = {

        // }
        // console.log('增加以前',obj);
        // // 1增
        // obj.name = '俊宇';
        // obj.age = 18;
        // obj.gender = '男';
        // console.log('增加以后',obj);


        // // 2 删 
        // delete obj.age;
        // console.log('删除以后',obj);


        // // 3 改  
        // obj.name = '张俊宇';
        // console.log('修改以后',obj);


        // // 4 查  
        // console.log(obj.name);
        // console.log(obj.age);

        // 语法2  数组关联语法 []

        /* 
            增  对象名['键名'] = 值;   // 键名之前不存在 
              给一个不存在的键 赋值  就是增
            删  delete 对象名['键名']
            改  对象名['键名'] = 新值 // 键名之前存在 
            查  对象['键名'] 
            如果存在这个键 那么输出这个键对应的值  
            如果不存在这个键  那么结果是 undefined 
        
        
        
        */

        // var person = new Object();
        // console.log('增加以前',person);
        // // 增  
        // person['name'] = 'zhangsan'
        // person['age'] = 18
        // person['gender'] = '男'

        // console.log('增加以后',person);


        // // 删除  
        // delete  person['age']
        // console.log('删除以后',person);


        // // 改 
        // person['name'] = '张三';
        // console.log('修改以后',person);


        // // 查 

        // console.group('我在查看对象的信息');
        // console.log(person['name']);
        // console.log(person['age']);

        // console.groupEnd();



        // 两种语法的区别: 
        // 如果键的名字 是 符合标识符命名规则和规范 两个语法没区别
        // 如果键的名字是 数字  或者特殊符号 必须采用数组关联语法 
        // 如果涉及到变量相关 那么必须采用数组关联语法 


        var obj = {
            name:'jack',
            age:19,
            1:'不明觉厉',
            2:'十动然拒',
            'aa^bb':'人艰不拆',
            'cc&dd':'喜大普奔'
        }


        // console.log(obj['1']);
        // delete obj[1]

        // console.log(obj.aa^bb); 报错 
        // console.log(obj['aa^bb']); 


        var ruirui = 'age';

        // console.log(obj.ruirui);//认为 ruirui是个键 不知道是变量  
        // console.log(obj['ruirui']);// 如果加上引号 还是认为是个普通的键 
        // 正确方法 
        // console.log(obj[ruirui]);// 不加引号 数组关联语法 
        // 识别到 ruirui 是个变量 
        // 从变量中拿出 age这个属性 
        // 对象去查找 age这个属性 
        // console.log(obj[ruirui]); 等同于 obj.age
    </script>
</body>
</html>